﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using RentHouse.Common;
using RentHouse.DTO;
using RentHouse.IService;

namespace RentHouse.Admin.Filters
{
    public class CheckMyPermissionAttribute:AuthorizeAttribute
    {
        public string permissionName;
        public CheckMyPermissionAttribute(string perName)
        {
            permissionName = perName;
        }
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            // 1、创建文件夹单独放自定义过滤器（Filters）自定义一个类（ CheckMyPermissionAttribute ）继承AuthorizeAttribute
            //2、重写OnAuthorization方法
            //3、获取该用户信息（ filterContext.HttpContext.User as MyFormsPrincipal<LoginAdminDTO>; ）
            //4、获取当前登录的用户权限（根据登录用户的id查询所对应的权限信息）
            //Userid =》user =》role =》permissions =》该用户的权限列表
            //    注：在过滤器中调用Services时，由于当前类不是Autofac创建的，所以不会自动进行注入，所以需要手动获取Service：DependencyResolver.Current.GetService<T>()
            //5、判断当前的请求权限是否在用户角色所拥有的权限中，如果在则不作处理，否则返回没有权限的信息提示（ filterContext.Result ）
            //如果是执行操作类即ajax请求(filterContext.HttpContext.Request.IsAjaxRequest()); 则返回filterContext.Result = new JsonResult() { Data = new AjaxResult() };
            //  否则则返回内容展示filterContext.Result = new ContentResult() { Content = "" };
            //   注：为方便标记权限添加构造函数

            var principal = filterContext.HttpContext.User as MyFormsPrincipal<LoginAdminDTO>;
           LoginAdminDTO loginAdmin = principal.UserData;
           IAdminUserService adminUser = DependencyResolver.Current.GetService<IAdminUserService>();
           var list= adminUser.GetPermissionsById(loginAdmin.Id);
            if (!list.Any(e=>e.Name==permissionName))
            {
                if (filterContext.HttpContext.Request.IsAjaxRequest())
                    filterContext.Result = new JsonResult { Data = new AjaxResult(ResultState.Error, "用户没有该权限") };
                else
                    filterContext.Result = new ContentResult() { Content= "用户没有该权限" };

            }


        }
    }
}